home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Online / SpeakFreely / src / blowfish / asm / win32.asm < prev    next >
Assembly Source File  |  2000-05-18  |  13KB  |  664 lines

  1.     ; Don't even think of reading this code
  2.     ; It was automatically generated by bf586.pl
  3.     ; Which is a perl program used to generate the x86 assember for
  4.     ; any of elf, a.out, Win32, or Solaris
  5.     ; It can be found in SSLeay 0.7.0+
  6.     ; eric <eay@mincom.oz.au>
  7.     ; 
  8.     TITLE    bfx86xxxx.asm
  9.         .386
  10. .model FLAT
  11. _TEXT    SEGMENT
  12. PUBLIC    _BF_encrypt
  13. EXTRN    _des_SPtrans:DWORD
  14. _BF_encrypt PROC NEAR
  15.     push    ebp
  16.     push    ebx
  17.     push    esi
  18.     push    edi
  19.     ; 
  20.     ; Load the 2 words
  21.     mov    eax,        DWORD PTR 20[esp]
  22.     mov    ecx,        DWORD PTR [eax]
  23.     mov    edx,        DWORD PTR 4[eax]
  24.     ; 
  25.     ; P pointer, s and enc flag
  26.     mov    edi,        DWORD PTR 24[esp]
  27.     xor    eax,        eax
  28.     xor    ebx,        ebx
  29.     mov    ebp,        DWORD PTR 28[esp]
  30.     cmp    ebp,        0
  31.     je    $L000start_decrypt
  32.     xor    ecx,        DWORD PTR [edi]
  33.     ; 
  34.     ; Round 0
  35.     ror    ecx,        16
  36.     mov    esi,        DWORD PTR 4[edi]
  37.     mov    al,        ch
  38.     mov    bl,        cl
  39.     ror    ecx,        16
  40.     xor    edx,        esi
  41.     mov    esi,        DWORD PTR 72[eax*4+edi]
  42.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  43.     mov    al,        ch
  44.     mov    bl,        cl
  45.     add    esi,        ebp
  46.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  47.     xor    esi,        eax
  48.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  49.     add    esi,        ebp
  50.     xor    eax,        eax
  51.     xor    edx,        esi
  52.     ; 
  53.     ; Round 1
  54.     ror    edx,        16
  55.     mov    esi,        DWORD PTR 8[edi]
  56.     mov    al,        dh
  57.     mov    bl,        dl
  58.     ror    edx,        16
  59.     xor    ecx,        esi
  60.     mov    esi,        DWORD PTR 72[eax*4+edi]
  61.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  62.     mov    al,        dh
  63.     mov    bl,        dl
  64.     add    esi,        ebp
  65.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  66.     xor    esi,        eax
  67.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  68.     add    esi,        ebp
  69.     xor    eax,        eax
  70.     xor    ecx,        esi
  71.     ; 
  72.     ; Round 2
  73.     ror    ecx,        16
  74.     mov    esi,        DWORD PTR 12[edi]
  75.     mov    al,        ch
  76.     mov    bl,        cl
  77.     ror    ecx,        16
  78.     xor    edx,        esi
  79.     mov    esi,        DWORD PTR 72[eax*4+edi]
  80.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  81.     mov    al,        ch
  82.     mov    bl,        cl
  83.     add    esi,        ebp
  84.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  85.     xor    esi,        eax
  86.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  87.     add    esi,        ebp
  88.     xor    eax,        eax
  89.     xor    edx,        esi
  90.     ; 
  91.     ; Round 3
  92.     ror    edx,        16
  93.     mov    esi,        DWORD PTR 16[edi]
  94.     mov    al,        dh
  95.     mov    bl,        dl
  96.     ror    edx,        16
  97.     xor    ecx,        esi
  98.     mov    esi,        DWORD PTR 72[eax*4+edi]
  99.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  100.     mov    al,        dh
  101.     mov    bl,        dl
  102.     add    esi,        ebp
  103.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  104.     xor    esi,        eax
  105.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  106.     add    esi,        ebp
  107.     xor    eax,        eax
  108.     xor    ecx,        esi
  109.     ; 
  110.     ; Round 4
  111.     ror    ecx,        16
  112.     mov    esi,        DWORD PTR 20[edi]
  113.     mov    al,        ch
  114.     mov    bl,        cl
  115.     ror    ecx,        16
  116.     xor    edx,        esi
  117.     mov    esi,        DWORD PTR 72[eax*4+edi]
  118.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  119.     mov    al,        ch
  120.     mov    bl,        cl
  121.     add    esi,        ebp
  122.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  123.     xor    esi,        eax
  124.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  125.     add    esi,        ebp
  126.     xor    eax,        eax
  127.     xor    edx,        esi
  128.     ; 
  129.     ; Round 5
  130.     ror    edx,        16
  131.     mov    esi,        DWORD PTR 24[edi]
  132.     mov    al,        dh
  133.     mov    bl,        dl
  134.     ror    edx,        16
  135.     xor    ecx,        esi
  136.     mov    esi,        DWORD PTR 72[eax*4+edi]
  137.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  138.     mov    al,        dh
  139.     mov    bl,        dl
  140.     add    esi,        ebp
  141.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  142.     xor    esi,        eax
  143.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  144.     add    esi,        ebp
  145.     xor    eax,        eax
  146.     xor    ecx,        esi
  147.     ; 
  148.     ; Round 6
  149.     ror    ecx,        16
  150.     mov    esi,        DWORD PTR 28[edi]
  151.     mov    al,        ch
  152.     mov    bl,        cl
  153.     ror    ecx,        16
  154.     xor    edx,        esi
  155.     mov    esi,        DWORD PTR 72[eax*4+edi]
  156.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  157.     mov    al,        ch
  158.     mov    bl,        cl
  159.     add    esi,        ebp
  160.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  161.     xor    esi,        eax
  162.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  163.     add    esi,        ebp
  164.     xor    eax,        eax
  165.     xor    edx,        esi
  166.     ; 
  167.     ; Round 7
  168.     ror    edx,        16
  169.     mov    esi,        DWORD PTR 32[edi]
  170.     mov    al,        dh
  171.     mov    bl,        dl
  172.     ror    edx,        16
  173.     xor    ecx,        esi
  174.     mov    esi,        DWORD PTR 72[eax*4+edi]
  175.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  176.     mov    al,        dh
  177.     mov    bl,        dl
  178.     add    esi,        ebp
  179.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  180.     xor    esi,        eax
  181.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  182.     add    esi,        ebp
  183.     xor    eax,        eax
  184.     xor    ecx,        esi
  185.     ; 
  186.     ; Round 8
  187.     ror    ecx,        16
  188.     mov    esi,        DWORD PTR 36[edi]
  189.     mov    al,        ch
  190.     mov    bl,        cl
  191.     ror    ecx,        16
  192.     xor    edx,        esi
  193.     mov    esi,        DWORD PTR 72[eax*4+edi]
  194.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  195.     mov    al,        ch
  196.     mov    bl,        cl
  197.     add    esi,        ebp
  198.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  199.     xor    esi,        eax
  200.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  201.     add    esi,        ebp
  202.     xor    eax,        eax
  203.     xor    edx,        esi
  204.     ; 
  205.     ; Round 9
  206.     ror    edx,        16
  207.     mov    esi,        DWORD PTR 40[edi]
  208.     mov    al,        dh
  209.     mov    bl,        dl
  210.     ror    edx,        16
  211.     xor    ecx,        esi
  212.     mov    esi,        DWORD PTR 72[eax*4+edi]
  213.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  214.     mov    al,        dh
  215.     mov    bl,        dl
  216.     add    esi,        ebp
  217.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  218.     xor    esi,        eax
  219.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  220.     add    esi,        ebp
  221.     xor    eax,        eax
  222.     xor    ecx,        esi
  223.     ; 
  224.     ; Round 10
  225.     ror    ecx,        16
  226.     mov    esi,        DWORD PTR 44[edi]
  227.     mov    al,        ch
  228.     mov    bl,        cl
  229.     ror    ecx,        16
  230.     xor    edx,        esi
  231.     mov    esi,        DWORD PTR 72[eax*4+edi]
  232.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  233.     mov    al,        ch
  234.     mov    bl,        cl
  235.     add    esi,        ebp
  236.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  237.     xor    esi,        eax
  238.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  239.     add    esi,        ebp
  240.     xor    eax,        eax
  241.     xor    edx,        esi
  242.     ; 
  243.     ; Round 11
  244.     ror    edx,        16
  245.     mov    esi,        DWORD PTR 48[edi]
  246.     mov    al,        dh
  247.     mov    bl,        dl
  248.     ror    edx,        16
  249.     xor    ecx,        esi
  250.     mov    esi,        DWORD PTR 72[eax*4+edi]
  251.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  252.     mov    al,        dh
  253.     mov    bl,        dl
  254.     add    esi,        ebp
  255.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  256.     xor    esi,        eax
  257.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  258.     add    esi,        ebp
  259.     xor    eax,        eax
  260.     xor    ecx,        esi
  261.     ; 
  262.     ; Round 12
  263.     ror    ecx,        16
  264.     mov    esi,        DWORD PTR 52[edi]
  265.     mov    al,        ch
  266.     mov    bl,        cl
  267.     ror    ecx,        16
  268.     xor    edx,        esi
  269.     mov    esi,        DWORD PTR 72[eax*4+edi]
  270.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  271.     mov    al,        ch
  272.     mov    bl,        cl
  273.     add    esi,        ebp
  274.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  275.     xor    esi,        eax
  276.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  277.     add    esi,        ebp
  278.     xor    eax,        eax
  279.     xor    edx,        esi
  280.     ; 
  281.     ; Round 13
  282.     ror    edx,        16
  283.     mov    esi,        DWORD PTR 56[edi]
  284.     mov    al,        dh
  285.     mov    bl,        dl
  286.     ror    edx,        16
  287.     xor    ecx,        esi
  288.     mov    esi,        DWORD PTR 72[eax*4+edi]
  289.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  290.     mov    al,        dh
  291.     mov    bl,        dl
  292.     add    esi,        ebp
  293.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  294.     xor    esi,        eax
  295.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  296.     add    esi,        ebp
  297.     xor    eax,        eax
  298.     xor    ecx,        esi
  299.     ; 
  300.     ; Round 14
  301.     ror    ecx,        16
  302.     mov    esi,        DWORD PTR 60[edi]
  303.     mov    al,        ch
  304.     mov    bl,        cl
  305.     ror    ecx,        16
  306.     xor    edx,        esi
  307.     mov    esi,        DWORD PTR 72[eax*4+edi]
  308.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  309.     mov    al,        ch
  310.     mov    bl,        cl
  311.     add    esi,        ebp
  312.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  313.     xor    esi,        eax
  314.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  315.     add    esi,        ebp
  316.     xor    eax,        eax
  317.     xor    edx,        esi
  318.     ; 
  319.     ; Round 15
  320.     ror    edx,        16
  321.     mov    esi,        DWORD PTR 64[edi]
  322.     mov    al,        dh
  323.     mov    bl,        dl
  324.     ror    edx,        16
  325.     xor    ecx,        esi
  326.     mov    esi,        DWORD PTR 72[eax*4+edi]
  327.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  328.     mov    al,        dh
  329.     mov    bl,        dl
  330.     add    esi,        ebp
  331.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  332.     xor    esi,        eax
  333.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  334.     add    esi,        ebp
  335.     xor    eax,        eax
  336.     xor    ecx,        esi
  337.     xor    edx,        DWORD PTR 68[edi]
  338.     mov    eax,        DWORD PTR 20[esp]
  339.     mov    DWORD PTR [eax],edx
  340.     mov    DWORD PTR 4[eax],ecx
  341.     pop    edi
  342.     pop    esi
  343.     pop    ebx
  344.     pop    ebp
  345.     ret
  346. $L000start_decrypt:
  347.     xor    ecx,        DWORD PTR 68[edi]
  348.     ; 
  349.     ; Round 16
  350.     ror    ecx,        16
  351.     mov    esi,        DWORD PTR 64[edi]
  352.     mov    al,        ch
  353.     mov    bl,        cl
  354.     ror    ecx,        16
  355.     xor    edx,        esi
  356.     mov    esi,        DWORD PTR 72[eax*4+edi]
  357.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  358.     mov    al,        ch
  359.     mov    bl,        cl
  360.     add    esi,        ebp
  361.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  362.     xor    esi,        eax
  363.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  364.     add    esi,        ebp
  365.     xor    eax,        eax
  366.     xor    edx,        esi
  367.     ; 
  368.     ; Round 15
  369.     ror    edx,        16
  370.     mov    esi,        DWORD PTR 60[edi]
  371.     mov    al,        dh
  372.     mov    bl,        dl
  373.     ror    edx,        16
  374.     xor    ecx,        esi
  375.     mov    esi,        DWORD PTR 72[eax*4+edi]
  376.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  377.     mov    al,        dh
  378.     mov    bl,        dl
  379.     add    esi,        ebp
  380.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  381.     xor    esi,        eax
  382.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  383.     add    esi,        ebp
  384.     xor    eax,        eax
  385.     xor    ecx,        esi
  386.     ; 
  387.     ; Round 14
  388.     ror    ecx,        16
  389.     mov    esi,        DWORD PTR 56[edi]
  390.     mov    al,        ch
  391.     mov    bl,        cl
  392.     ror    ecx,        16
  393.     xor    edx,        esi
  394.     mov    esi,        DWORD PTR 72[eax*4+edi]
  395.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  396.     mov    al,        ch
  397.     mov    bl,        cl
  398.     add    esi,        ebp
  399.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  400.     xor    esi,        eax
  401.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  402.     add    esi,        ebp
  403.     xor    eax,        eax
  404.     xor    edx,        esi
  405.     ; 
  406.     ; Round 13
  407.     ror    edx,        16
  408.     mov    esi,        DWORD PTR 52[edi]
  409.     mov    al,        dh
  410.     mov    bl,        dl
  411.     ror    edx,        16
  412.     xor    ecx,        esi
  413.     mov    esi,        DWORD PTR 72[eax*4+edi]
  414.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  415.     mov    al,        dh
  416.     mov    bl,        dl
  417.     add    esi,        ebp
  418.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  419.     xor    esi,        eax
  420.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  421.     add    esi,        ebp
  422.     xor    eax,        eax
  423.     xor    ecx,        esi
  424.     ; 
  425.     ; Round 12
  426.     ror    ecx,        16
  427.     mov    esi,        DWORD PTR 48[edi]
  428.     mov    al,        ch
  429.     mov    bl,        cl
  430.     ror    ecx,        16
  431.     xor    edx,        esi
  432.     mov    esi,        DWORD PTR 72[eax*4+edi]
  433.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  434.     mov    al,        ch
  435.     mov    bl,        cl
  436.     add    esi,        ebp
  437.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  438.     xor    esi,        eax
  439.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  440.     add    esi,        ebp
  441.     xor    eax,        eax
  442.     xor    edx,        esi
  443.     ; 
  444.     ; Round 11
  445.     ror    edx,        16
  446.     mov    esi,        DWORD PTR 44[edi]
  447.     mov    al,        dh
  448.     mov    bl,        dl
  449.     ror    edx,        16
  450.     xor    ecx,        esi
  451.     mov    esi,        DWORD PTR 72[eax*4+edi]
  452.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  453.     mov    al,        dh
  454.     mov    bl,        dl
  455.     add    esi,        ebp
  456.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  457.     xor    esi,        eax
  458.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  459.     add    esi,        ebp
  460.     xor    eax,        eax
  461.     xor    ecx,        esi
  462.     ; 
  463.     ; Round 10
  464.     ror    ecx,        16
  465.     mov    esi,        DWORD PTR 40[edi]
  466.     mov    al,        ch
  467.     mov    bl,        cl
  468.     ror    ecx,        16
  469.     xor    edx,        esi
  470.     mov    esi,        DWORD PTR 72[eax*4+edi]
  471.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  472.     mov    al,        ch
  473.     mov    bl,        cl
  474.     add    esi,        ebp
  475.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  476.     xor    esi,        eax
  477.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  478.     add    esi,        ebp
  479.     xor    eax,        eax
  480.     xor    edx,        esi
  481.     ; 
  482.     ; Round 9
  483.     ror    edx,        16
  484.     mov    esi,        DWORD PTR 36[edi]
  485.     mov    al,        dh
  486.     mov    bl,        dl
  487.     ror    edx,        16
  488.     xor    ecx,        esi
  489.     mov    esi,        DWORD PTR 72[eax*4+edi]
  490.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  491.     mov    al,        dh
  492.     mov    bl,        dl
  493.     add    esi,        ebp
  494.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  495.     xor    esi,        eax
  496.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  497.     add    esi,        ebp
  498.     xor    eax,        eax
  499.     xor    ecx,        esi
  500.     ; 
  501.     ; Round 8
  502.     ror    ecx,        16
  503.     mov    esi,        DWORD PTR 32[edi]
  504.     mov    al,        ch
  505.     mov    bl,        cl
  506.     ror    ecx,        16
  507.     xor    edx,        esi
  508.     mov    esi,        DWORD PTR 72[eax*4+edi]
  509.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  510.     mov    al,        ch
  511.     mov    bl,        cl
  512.     add    esi,        ebp
  513.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  514.     xor    esi,        eax
  515.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  516.     add    esi,        ebp
  517.     xor    eax,        eax
  518.     xor    edx,        esi
  519.     ; 
  520.     ; Round 7
  521.     ror    edx,        16
  522.     mov    esi,        DWORD PTR 28[edi]
  523.     mov    al,        dh
  524.     mov    bl,        dl
  525.     ror    edx,        16
  526.     xor    ecx,        esi
  527.     mov    esi,        DWORD PTR 72[eax*4+edi]
  528.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  529.     mov    al,        dh
  530.     mov    bl,        dl
  531.     add    esi,        ebp
  532.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  533.     xor    esi,        eax
  534.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  535.     add    esi,        ebp
  536.     xor    eax,        eax
  537.     xor    ecx,        esi
  538.     ; 
  539.     ; Round 6
  540.     ror    ecx,        16
  541.     mov    esi,        DWORD PTR 24[edi]
  542.     mov    al,        ch
  543.     mov    bl,        cl
  544.     ror    ecx,        16
  545.     xor    edx,        esi
  546.     mov    esi,        DWORD PTR 72[eax*4+edi]
  547.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  548.     mov    al,        ch
  549.     mov    bl,        cl
  550.     add    esi,        ebp
  551.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  552.     xor    esi,        eax
  553.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  554.     add    esi,        ebp
  555.     xor    eax,        eax
  556.     xor    edx,        esi
  557.     ; 
  558.     ; Round 5
  559.     ror    edx,        16
  560.     mov    esi,        DWORD PTR 20[edi]
  561.     mov    al,        dh
  562.     mov    bl,        dl
  563.     ror    edx,        16
  564.     xor    ecx,        esi
  565.     mov    esi,        DWORD PTR 72[eax*4+edi]
  566.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  567.     mov    al,        dh
  568.     mov    bl,        dl
  569.     add    esi,        ebp
  570.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  571.     xor    esi,        eax
  572.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  573.     add    esi,        ebp
  574.     xor    eax,        eax
  575.     xor    ecx,        esi
  576.     ; 
  577.     ; Round 4
  578.     ror    ecx,        16
  579.     mov    esi,        DWORD PTR 16[edi]
  580.     mov    al,        ch
  581.     mov    bl,        cl
  582.     ror    ecx,        16
  583.     xor    edx,        esi
  584.     mov    esi,        DWORD PTR 72[eax*4+edi]
  585.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  586.     mov    al,        ch
  587.     mov    bl,        cl
  588.     add    esi,        ebp
  589.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  590.     xor    esi,        eax
  591.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  592.     add    esi,        ebp
  593.     xor    eax,        eax
  594.     xor    edx,        esi
  595.     ; 
  596.     ; Round 3
  597.     ror    edx,        16
  598.     mov    esi,        DWORD PTR 12[edi]
  599.     mov    al,        dh
  600.     mov    bl,        dl
  601.     ror    edx,        16
  602.     xor    ecx,        esi
  603.     mov    esi,        DWORD PTR 72[eax*4+edi]
  604.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  605.     mov    al,        dh
  606.     mov    bl,        dl
  607.     add    esi,        ebp
  608.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  609.     xor    esi,        eax
  610.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  611.     add    esi,        ebp
  612.     xor    eax,        eax
  613.     xor    ecx,        esi
  614.     ; 
  615.     ; Round 2
  616.     ror    ecx,        16
  617.     mov    esi,        DWORD PTR 8[edi]
  618.     mov    al,        ch
  619.     mov    bl,        cl
  620.     ror    ecx,        16
  621.     xor    edx,        esi
  622.     mov    esi,        DWORD PTR 72[eax*4+edi]
  623.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  624.     mov    al,        ch
  625.     mov    bl,        cl
  626.     add    esi,        ebp
  627.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  628.     xor    esi,        eax
  629.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  630.     add    esi,        ebp
  631.     xor    eax,        eax
  632.     xor    edx,        esi
  633.     ; 
  634.     ; Round 1
  635.     ror    edx,        16
  636.     mov    esi,        DWORD PTR 4[edi]
  637.     mov    al,        dh
  638.     mov    bl,        dl
  639.     ror    edx,        16
  640.     xor    ecx,        esi
  641.     mov    esi,        DWORD PTR 72[eax*4+edi]
  642.     mov    ebp,        DWORD PTR 1096[ebx*4+edi]
  643.     mov    al,        dh
  644.     mov    bl,        dl
  645.     add    esi,        ebp
  646.     mov    eax,        DWORD PTR 2120[eax*4+edi]
  647.     xor    esi,        eax
  648.     mov    ebp,        DWORD PTR 3144[ebx*4+edi]
  649.     add    esi,        ebp
  650.     xor    eax,        eax
  651.     xor    ecx,        esi
  652.     xor    edx,        DWORD PTR [edi]
  653.     mov    eax,        DWORD PTR 20[esp]
  654.     mov    DWORD PTR [eax],edx
  655.     mov    DWORD PTR 4[eax],ecx
  656.     pop    edi
  657.     pop    esi
  658.     pop    ebx
  659.     pop    ebp
  660.     ret
  661. _BF_encrypt ENDP
  662. _TEXT    ENDS
  663. END
  664.